/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.switz.agendacita.persistence;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import com.switz.agendacita.dto.EmpresaServicio;
import com.switz.agendacita.dto.Usuario;
import com.switz.agendacita.persistence.iface.EmpresaServicioDao;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.namedparam.SqlParameterSourceUtils;
import org.springframework.jdbc.core.simple.ParameterizedBeanPropertyRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcInsert;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.stereotype.Repository;

/**
 *
 * @author jose angel
 */
@Repository
public class EmpresaServicioDaoImpl extends JdbcDaoSupport implements EmpresaServicioDao {

	private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
    @Autowired
    public EmpresaServicioDaoImpl(DataSource dataSource) {

        setDataSource(dataSource);
        this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(
				dataSource);
    }

    @Override
    public Integer getTiempoServicioEmpresa(String idServicio, String idEmpresa) {
        String query = "SELECT tiempo FROM empresaservicios where idservicio=? and idempresa=?";
        Integer tiempoServicio = (Integer) getJdbcTemplate().queryForObject(query, new Object[]{idServicio, idEmpresa}, Integer.class);

        return tiempoServicio;
    }

	
    //multiples inserciones en la tabla empresaservicio atravez de una lista
	@Override
	public void insertBatchEmpresaServicio(List empresaServicioList) {
		SimpleJdbcInsert simpleJdbcInsert = new SimpleJdbcInsert(
                getJdbcTemplate().getDataSource())
                .withTableName("empresaservicios");

        SqlParameterSource[] array = SqlParameterSourceUtils.createBatch(empresaServicioList.toArray());

        simpleJdbcInsert.executeBatch(array);
		
	}

	@Override
	public void deleteEmpresaServicio(String idEmpresa, String idServicio) {
		String query = "delete from empresaservicios where idempresa = ? and idservicio = ?";
        getJdbcTemplate().update(query, new Object[]{idEmpresa,idServicio});
		
	}
	@Override
	public void insertEmpresaServicio(EmpresaServicio empresaServicio) {
		
		SimpleJdbcInsert simpleJdbcInsert = new SimpleJdbcInsert(
				getJdbcTemplate().getDataSource()).withTableName("empresaservicios");
		SqlParameterSource parameters = new BeanPropertySqlParameterSource(
				empresaServicio);

		simpleJdbcInsert.execute(parameters);
		
	}

	@Override
	public EmpresaServicio getCostoTiempoServicioEmpresa(String idEmpresa,
			String idServicio) {
		String query="SELECT costo, tiempo FROM empresaservicios WHERE idempresa=? AND idservicio=?";
				
		List listaEmpresaServicio = getJdbcTemplate().query(query, new Object[]{idEmpresa, idServicio},
				ParameterizedBeanPropertyRowMapper.newInstance(EmpresaServicio.class));
        EmpresaServicio empresaServicio=listaEmpresaServicio.size()>0?(EmpresaServicio)listaEmpresaServicio.get(0):null;
        
        return empresaServicio;
        
	}

	@Override
	public void updateCostoServicioEmpresa(String idEmpresa, String idServicio, Float costo, Integer tiempo) {
		String query="UPDATE empresaservicios SET costo =:costo, tiempo =:tiempo WHERE idempresa =:idempresa AND idservicio =:idservicio";	
   	    SqlParameterSource params = new MapSqlParameterSource("costo", costo)   	      	    
   	    .addValue("tiempo", tiempo)
   	    .addValue("idempresa", idEmpresa)
	    .addValue("idservicio", idServicio);
   	    
         
		namedParameterJdbcTemplate.update(query, params);
		
	}

  	
}
